/*
 * JVM_Field.h
 *
 *  Created on: 02.01.2011
 *      Author: Tavin
 */


#ifndef JVM_FIELD_H_
#define JVM_FIELD_H_

#include "boolean.h"
#include "JVM_DataTypes.h"

#define FIELD_TYPE_UNKNOWN		 0
#define FIELD_TYPE_BYTE				 1
#define FIELD_TYPE_CHAR				 2
#define FIELD_TYPE_INT				 3
#define FIELD_TYPE_FLOAT			 4
#define FIELD_TYPE_SHORT		 	 5


#define FIELD_TYPE_LONG				 			 6
#define FIELD_TYPE_DOUBLE			 			 7
#define FIELD_TYPE_ARRAY_REFERENCE	 8
#define FIELD_TYPE_CLASS_REFERENCE	 9
#define FIELD_TYPE_BOOLEAN			 		10

// ACCESS FLAGS
#define ACC_PUBLIC  			0x0001
#define ACC_PRIVATE  			0x0002
#define ACC_PROTECTED  		0x0004
#define ACC_STATIC  			0x0008
#define ACC_FINAL  				0x0010
#define ACC_VOLATILE  		0x0040
#define ACC_TRANSIENT  		0x0080

/**
 * Field
 */
typedef struct {

	uint16_t accesFlags;
	uint16_t dataOffset;
	uint16_t constantValueReference;
	uint8_t  fieldType;
	uint8_t  dummy;

} JVM_Field_t;




/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isPublic							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isPublic(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_PUBLIC)> 0)
	return(TRUE);

	return(FALSE);
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isPrivate							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isPrivate(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_PRIVATE)> 0)
	return(TRUE);

	return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isProtected						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isProtected(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_PROTECTED)> 0)
	return(TRUE);

	return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isStatic							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isStatic(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_STATIC)> 0)
	return(TRUE);

	return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isFinal							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isFinal(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_FINAL)> 0)
	return(TRUE);

	return(FALSE);
}

#define ACC_FINAL  				0x0010
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isVolatile							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isVolatile(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_VOLATILE)> 0)
	return(TRUE);

	return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Field_isTransient						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.8			Status : Working   			*/
/*																						*/
/****************************************************************************************/

boolean static inline JVM_Field_isTransient(JVM_Field_t *myField)
{
if ((myField->accesFlags & ACC_TRANSIENT)> 0)
	return(TRUE);

	return(FALSE);
}

#endif /* JVM_FIELD_H_ */
